const User = require('./User');
const Course = require('./Course');
const Order = require('./Order');
const CourseUser = require('./CourseUser');
const Category = require('./Category');
const Notification = require('./Notification');
const Lesson = require('./Lesson');
const LessonView = require('./LessonView');
const StudentLesson = require('./StudentLesson');

// 用户与课程的关联（多对多）- 学生购买课程
User.belongsToMany(Course, {
  through: CourseUser,
  foreignKey: 'user_id',
  otherKey: 'course_id',
  as: 'enrolled_courses'
});

Course.belongsToMany(User, {
  through: CourseUser,
  foreignKey: 'course_id',
  otherKey: 'user_id',
  as: 'enrolled_students'
});

// 课程与教师的关联（多对一）- 教师创建课程
Course.belongsTo(User, {
  foreignKey: 'teacher_id',
  as: 'teacher'
});

User.hasMany(Course, {
  foreignKey: 'teacher_id',
  as: 'created_courses'
});

// 用户与订单的关联（一对多）
User.hasMany(Order, {
  foreignKey: 'user_id',
  as: 'orders'
});

Order.belongsTo(User, {
  foreignKey: 'user_id',
  as: 'user'
});

// 课程与订单的关联（一对多）
Course.hasMany(Order, {
  foreignKey: 'course_id',
  as: 'orders'
});

Order.belongsTo(Course, {
  foreignKey: 'course_id',
  as: 'course'
});

// 课程与分类的关联（多对一）
Course.belongsTo(Category, {
  foreignKey: 'category_id',
  as: 'category'
});

Category.hasMany(Course, {
  foreignKey: 'category_id',
  as: 'courses'
});

// 分类的层级关系（自关联）
Category.belongsTo(Category, {
  foreignKey: 'parent_id',
  as: 'parent'
});

Category.hasMany(Category, {
  foreignKey: 'parent_id',
  as: 'children'
});

// 用户与通知的关联（一对多）
User.hasMany(Notification, {
  foreignKey: 'user_id',
  as: 'notifications'
});

Notification.belongsTo(User, {
  foreignKey: 'user_id',
  as: 'user'
});

// 课程用户关联
CourseUser.belongsTo(User, {
  foreignKey: 'user_id',
  as: 'user'
});

CourseUser.belongsTo(Course, {
  foreignKey: 'course_id',
  as: 'course'
});

CourseUser.belongsTo(Order, {
  foreignKey: 'order_id',
  as: 'order'
});

// 课程与课时的关联（一对多）
Course.hasMany(Lesson, {
  foreignKey: 'course_id',
  as: 'lessons'
});

Lesson.belongsTo(Course, {
  foreignKey: 'course_id',
  as: 'course'
});

// 用户与课时观看记录的关联（一对多）
User.hasMany(LessonView, {
  foreignKey: 'user_id',
  as: 'lesson_views'
});

LessonView.belongsTo(User, {
  foreignKey: 'user_id',
  as: 'user'
});

// 课程与课时观看记录的关联（一对多）
Course.hasMany(LessonView, {
  foreignKey: 'course_id',
  as: 'lesson_views'
});

LessonView.belongsTo(Course, {
  foreignKey: 'course_id',
  as: 'course'
});

// 课时与观看记录的关联（一对多）
Lesson.hasMany(LessonView, {
  foreignKey: 'lesson_id',
  as: 'views'
});

LessonView.belongsTo(Lesson, {
  foreignKey: 'lesson_id',
  as: 'lesson'
});

// 学生与课时记录的关联（一对多）
User.hasMany(StudentLesson, {
  foreignKey: 'student_id',
  as: 'student_lessons'
});

StudentLesson.belongsTo(User, {
  foreignKey: 'student_id',
  as: 'student'
});

module.exports = {
  User,
  Course,
  Order,
  CourseUser,
  Category,
  Notification,
  Lesson,
  LessonView,
  StudentLesson
}; 